package com.smart.community.region.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.smart.community.commons.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 住户房户关联实体类
 * 专注于关联信息管理，支持多房户关联
 * 
 * @author Wu.Liang
 * @since 2025-07-28
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sc_resident_household")
public class ResidentHousehold extends BaseEntity {
	private static final long serialVersionUID = -1180452717510030612L;

	/** 住户ID */
    @TableField("resident_id")
    private Long residentId;
    
    /** 房户ID */
    @TableField("household_id")
    private Long householdId;
    
    /** 住户身份：1-户主，2-家庭成员，3-租客，4-临时居住 */
    @TableField("resident_type")
    private Integer residentType;
    
    /** 入住日期 */
    @TableField("move_in_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate moveInDate;
    
    /** 搬出日期 */
    @TableField("move_out_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate moveOutDate;
    
    /** 合同开始日期(租客) */
    @TableField("contract_start_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate contractStartDate;
    
    /** 合同结束日期(租客) */
    @TableField("contract_end_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate contractEndDate;
    
    /** 月租金(租客) */
    @TableField("monthly_rent")
    private BigDecimal monthlyRent;
    
    /** 押金(租客) */
    @TableField("deposit")
    private BigDecimal deposit;
    
    /** 合同编号(租客) */
    @TableField("contract_no")
    private String contractNo;
    
    /** 申请状态：0-待审核，1-已通过，2-已拒绝，3-已撤销 */
    @TableField("apply_status")
    private Integer applyStatus;
    
    /** 申请时间 */
    @TableField("apply_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime applyTime;
    
    /** 审核时间 */
    @TableField("approve_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime approveTime;
    
    /** 审核人 */
    @TableField("approve_by")
    private Long approveBy;
    
    /** 审核备注 */
    @TableField("approve_remark")
    private String approveRemark;
    
    /** 状态：0-无效，1-有效 */
    @TableField("status")
    private Integer status;
} 